<template>
	<div class="login_bg">
		<div class="login_adv" style="background-image: url(img/auth_banner.jpg);">
			<div class="login_adv__title">
				<h2>SCUI</h2>
				<h4>{{ $t('login.slogan') }}</h4>
				<p>{{ $t('login.describe') }}</p>
				<div>
					<span>
						<el-icon><sc-icon-vue/></el-icon>
					</span>
					<span>
						<el-icon class="add"><el-icon-plus/></el-icon>
					</span>
					<span>
						<el-icon><el-icon-eleme-filled/></el-icon>
					</span>
				</div>
			</div>
			<div class="login_adv__bottom">
				© {{ $CONFIG.APP_NAME }} {{ $CONFIG.APP_VER }}
			</div>
		</div>
		<div class="login_main">
			<div class="login_config">
				<el-button :icon="config.theme=='dark'?'el-icon-sunny':'el-icon-moon'" circle type="info"
						   @click="configTheme"></el-button>
				<el-dropdown trigger="click" placement="bottom-end" @command="configLang">
					<el-button circle>
						<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
							 aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet"
							 viewBox="0 0 512 512">
							<path
								d="M478.33 433.6l-90-218a22 22 0 0 0-40.67 0l-90 218a22 22 0 1 0 40.67 16.79L316.66 406h102.67l18.33 44.39A22 22 0 0 0 458 464a22 22 0 0 0 20.32-30.4zM334.83 362L368 281.65L401.17 362z"
								fill="currentColor"></path>
							<path
								d="M267.84 342.92a22 22 0 0 0-4.89-30.7c-.2-.15-15-11.13-36.49-34.73c39.65-53.68 62.11-114.75 71.27-143.49H330a22 22 0 0 0 0-44H214V70a22 22 0 0 0-44 0v20H54a22 22 0 0 0 0 44h197.25c-9.52 26.95-27.05 69.5-53.79 108.36c-31.41-41.68-43.08-68.65-43.17-68.87a22 22 0 0 0-40.58 17c.58 1.38 14.55 34.23 52.86 83.93c.92 1.19 1.83 2.35 2.74 3.51c-39.24 44.35-77.74 71.86-93.85 80.74a22 22 0 1 0 21.07 38.63c2.16-1.18 48.6-26.89 101.63-85.59c22.52 24.08 38 35.44 38.93 36.1a22 22 0 0 0 30.75-4.9z"
								fill="currentColor"></path>
						</svg>
					</el-button>
					<template #dropdown>
						<el-dropdown-menu>
							<el-dropdown-item v-for="item in lang" :key="item.value" :command="item"
											  :class="{'selected':config.lang==item.value}">{{ item.name }}
							</el-dropdown-item>
						</el-dropdown-menu>
					</template>
				</el-dropdown>
			</div>
			<div class="login-form">
				<div class="login-header">
					<div class="logo">
						<img :alt="$CONFIG.APP_NAME" src="img/logo.png">
						<label>{{ $CONFIG.APP_NAME }}</label>
					</div>
					<h2>{{ $t('login.signInTitle') }}</h2>
				</div>
				<el-form ref="loginForm" :model="ruleForm" :rules="rules" label-width="0" size="large">
					<el-form-item prop="user">
						<el-input v-model="ruleForm.user" prefix-icon="el-icon-user" clearable @keyup.enter="login"
								  :placeholder="$t('login.userPlaceholder')"></el-input>
					</el-form-item>
					<el-form-item prop="password">
						<el-input v-model="ruleForm.password" prefix-icon="el-icon-lock" clearable show-password @keyup.enter="login"
								  :placeholder="$t('login.PWPlaceholder')"></el-input>
					</el-form-item>
					<el-form-item prop="verifyCode">
						<el-input v-model="ruleForm.verifyCode" prefix-icon="el-icon-picture" clearable
								  placeholder="请输入验证码" :maxlength="ruleForm.verifyCodeLen" @keyup.enter="login">
							<template #append>
								<captcha v-model="ruleForm.captchaId"
										 @click="() => { this.ruleForm.verifyCode = '' }"></captcha>
							</template>
						</el-input>
					</el-form-item>
					<el-form-item>
						<el-button type="primary" style="width: 100%;" :loading="islogin" round @click="login">
							{{ $t('login.signIn') }}
						</el-button>
					</el-form-item>
				</el-form>
			</div>
		</div>
	</div>
</template>

<script>
import Captcha from "@/components/captcha"

export default {
	components: {
		Captcha
	},
	data() {
		return {
			ruleForm: {
				user: "admin",
				password: "123456",
				autologin: false,
				verifyCode: '',
				verifyCodeLen: 4,
				captchaId: '',
			},
			rules: {
				user: [
					{required: true, message: this.$t('login.userError'), trigger: 'blur'}
				],
				password: [
					{required: true, message: this.$t('login.PWError'), trigger: 'blur'}
				],
				verifyCode: [
					{required: true, message: '验证码不能为空', trigger: 'blur'}
				]
			},
			islogin: false,
			config: {
				lang: this.$TOOL.data.get('APP_LANG') || this.$CONFIG.LANG,
				theme: this.$TOOL.data.get('APP_THEME') || 'default'
			},
			lang: [
				{
					name: '简体中文',
					value: 'zh-cn',
				},
				{
					name: 'English',
					value: 'en',
				}
			]
		}
	},
	watch: {
		'config.theme'(val) {
			document.body.setAttribute('data-theme', val)
			this.$TOOL.data.set("APP_THEME", val);
		},
		'config.lang'(val) {
			this.$i18n.locale = val
			this.$TOOL.data.set("APP_LANG", val);
		}
	},
	created: function () {
		// 如果是正式模式，剔除默认的账号密码
		if (process.env.NODE_ENV === 'production') {
			this.ruleForm.user = '';
			this.ruleForm.password = '';
		}

		this.$TOOL.data.remove("TOKEN")
		this.$TOOL.data.remove("USER_INFO")
		this.$TOOL.data.remove("MENU")
		this.$TOOL.data.remove("PERMISSIONS")
		this.$TOOL.data.remove("grid")
		this.$store.commit("clearViewTags")
		this.$store.commit("clearKeepLive")
		this.$store.commit("clearIframeList")
		// console.log('%c SCUI %c Gitee: https://gitee.com/lolicode/scui', 'background:#666;color:#fff;border-radius:3px;', '')
	},
	methods: {
		async login() {

			var validate = await this.$refs.loginForm.validate().catch(() => {
			})
			if (!validate) {
				return false
			}

			this.islogin = true
			var data = {
				type: 'hash',
				username: this.ruleForm.user,
				password: this.$TOOL.crypto.MD5(this.ruleForm.password),
				captchaId: this.ruleForm.captchaId,
				verifyCode: this.ruleForm.verifyCode,
			}
			//获取token
			var res = await this.$API.gdshop.open.userLogin(data)
			if (res.code === 0) {
				this.$TOOL.data.set("TOKEN", res.data.token)
				this.$TOOL.data.set("USER_INFO", res.data.userInfo)
			} else {
				this.islogin = false
				this.$message.warning(res.message)
				return false
			}
			//获取菜单
			let jieguo = this.$TOOL.adminGetMyMenu(this.$API);
			if (jieguo[0] === false) {
				this.islogin = false
				this.$message.warning(jieguo[1])
				return false
			}

			setTimeout(() => {
				this.$router.replace({
					path: '/'
				});
				this.$message.success("Login Success 登录成功");
				this.islogin = false;
			}, 500)
		},
		configTheme() {
			this.config.theme = this.config.theme == 'default' ? 'dark' : 'default'
		},
		configLang(command) {
			this.config.lang = command.value
		}
	}
}
</script>

<style scoped>
.login_bg {
	width: 100%;
	height: 100%;
	background: #fff;
	display: flex;
}

.login_adv {
	width: 33.33333%;
	background-color: #555;
	background-size: cover;
	background-position: center center;
	background-repeat: no-repeat;
	position: relative;
}

.login_adv__title {
	color: #fff;
	padding: 40px;
}

.login_adv__title h2 {
	font-size: 40px;
}

.login_adv__title h4 {
	font-size: 18px;
	margin-top: 10px;
	font-weight: normal;
}

.login_adv__title p {
	font-size: 14px;
	margin-top: 10px;
	line-height: 1.8;
	color: rgba(255, 255, 255, 0.6);
}

.login_adv__title div {
	margin-top: 10px;
	display: flex;
	align-items: center;
}

.login_adv__title div span {
	margin-right: 15px;
}

.login_adv__title div i {
	font-size: 40px;
}

.login_adv__title div i.add {
	font-size: 20px;
	color: rgba(255, 255, 255, 0.6);
}

.login_adv__bottom {
	position: absolute;
	left: 0px;
	right: 0px;
	bottom: 0px;
	color: #fff;
	padding: 40px;
	background-image: linear-gradient(transparent, #000);
}

.login_main {
	flex: 1;
	overflow: auto;
	display: flex;
}

.login-form {
	width: 400px;
	margin: auto;
	padding: 20px 0;
}

.login-header {
	margin-bottom: 20px;
}

.login-header .logo {
	display: flex;
	align-items: center;
}

.login-header .logo img {
	width: 35px;
	height: 35px;
	vertical-align: bottom;
	margin-right: 10px;
}

.login-header .logo label {
	font-size: 24px;
}

.login-header h2 {
	font-size: 24px;
	font-weight: bold;
	margin-top: 50px;
}

.login-oauth {
	display: flex;
	justify-content: space-around;
}

.login-form .el-divider {
	margin-top: 40px;
}

.login_config {
	position: absolute;
	top: 20px;
	right: 20px;
}

.el-dropdown-menu__item.selected {
	color: var(--el-color-primary);
}

@media (max-width: 1200px) {
	.login-form {
		width: 340px;
	}
}

@media (max-width: 1000px) {
	.login_main {
		display: block;
	}

	.login-form {
		width: 100%;
		padding: 20px 40px;
	}

	.login_adv {
		display: none;
	}
}
</style>
